Transactional memory (TM) is a relatively new parallel programming abstraction that will likely be useful in writing programs for a new generation of Multicore and Manycore parallel computers. Transactional memory provides a programmer with a non-imperative way to provide isolation and atomicity for concurrently executing threads that share data. In published papers and current systems, transactional memory is closely tied to a thread. A thread starts a transaction, which protects its code against memory references from code running on other threads.
This approach is valuable, since many programs are written with a small number of concurrent threads. However, there are other approaches to writing parallel programs that would also benefit from the isolation and atomicity offered by transactional memory. For example, data parallelism is an alternative parallel programming abstraction in which an operation is applied to each element in a collection of data. Typically the operation must be capable of running independently in parallel when applied to each element. For example, the application of the operation to different elements must not interfere with one another, other than through specially supported abstractions like reductions. Thus, problems with high degrees of data parallelism and complex interactions between operations are difficult to parallelize efficiently with transactional memory or with existing data parallelism abstractions.